/*
* Project: My Code
* Module: Kit File merge
* File: main.c
* Created Date: 2024-06-01 15:21:56
* Author: Huangjiacheng
* Description: description
*
*历史记录：
*
* Copyright (c) 2024 - vDiscovery, Inc
*/


/* ======================================================================================
* includes
* 添加头文件位置
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <fcntl.h>
#include <dirent.h>
#include <sys/stat.h>

#include "core.h"
#include "log.h"

/* ======================================================================================
* macros
* 宏定义位置
*/


/* ======================================================================================
* log
* log标志位置
*/



/* ======================================================================================
* extern
* 外部定义变量或函数位置
*/


/* ======================================================================================
* declaration
* 函数声明位置
*/


/* ======================================================================================
* types
* 类型定义位置
*/


/* ======================================================================================
* globals
* 全局变量位置
*/
static input_param_t g_input_param = {0};
static img_bin_header_info_t g_img_bin_header = {0};
static dir_info_t g_dir_info = {0};

/* ======================================================================================
* private implementation
* 本模块私有函数位置
*/


/* ======================================================================================
* implementation
* 本模块对外函数位置
*/

/**
 * @brief 函数入口
 *
 * @return int
 */
int main(int argc, char *argv[])
{
    int ret = 0;

    /* ======================================================================================
    * 初始化单bin文件头
    * ======================================================================================*/
    g_img_bin_header.byteorder = 0x11223344;
    g_img_bin_header.megic = 0x11223344;

    /* ======================================================================================
    * 判断程序所在目录下是否已有资源bin文件
    * 1,存在提取版本号并加1
    * 2,不存在忽略
    * ======================================================================================*/
    ret = file_util_check_exist_res_bin(&g_img_bin_header);

    /* ======================================================================================
    * 解析程序输入参数 -f 表示以.xxx的后缀名 -v 表示手动版本号
    * ======================================================================================*/
    if(argc > 1)
    {
        ret = util_parse_input_param(argc, argv, &g_input_param);
        if( ret )
        {
            goto exit;
        }
    }

    if( strlen(g_input_param.file_suffix) == 0 )
    {
        log_info("合并所有文件\n");
    }
    else
    {
        log_info("仅合并所有 %s 文件\n", g_input_param.file_suffix);
    }

    /* ======================================================================================
    * 查看是否有资源目录
    * ======================================================================================*/
    ret = file_util_dir_exist(RES_DIR);
    if( ret )
    {
        goto exit;
    }

    /* ======================================================================================
    * 查看当前系统环境是否是python3
    * ======================================================================================*/
    ret = scripts_check_python3_exist();
    if( ret )
    {
        goto exit;
    }

    /* ======================================================================================
    * 检查output目录
    * 1,如果output目录不存在则重新创建
    * ======================================================================================*/
    ret = file_util_check_output_dir();
    if( ret )
    {
        goto exit;
    }

    /* ======================================================================================
    * 处理output目录内的文件
    * ======================================================================================*/
    ret = file_util_output_dir_file_handle();
    if( ret )
    {
        goto exit;
    }

    /* ======================================================================================
    * 查看、分析res目录下的文件
    * 1,如果有后缀则只提取后缀的文件列表
    * ======================================================================================*/
    ret = file_util_catch_res_dir(&g_dir_info,g_input_param.file_suffix);
    if( ret )
    {
        goto exit;
    }

    /* ======================================================================================
    * 根据g_dir_info记录的res目录文件情况生成纯文件数据的res_data.bin和描述data文件的h文件
    * ======================================================================================*/
    ret = file_util_gen_res_data(&g_dir_info);
    if( ret )
    {
        goto exit;
    }

    /* ======================================================================================
    * 根据g_dir_info 生成单bin文件
    * ======================================================================================*/
    ret = file_util_gen_single_res_bin(&g_dir_info,&g_img_bin_header);
    if( ret )
    {
        goto exit;
    }

    return 0;
exit:
    if(g_dir_info.file)
    {
        free(g_dir_info.file);
        g_dir_info.file = NULL;
    }

    return ret;
}
